"""
 数据容器之集合：
    1.无序不重复、不能通过下标索引取出元素、可修改
    2.可以容纳多个不同类型的数据
集合操作：
    1.add 添加元素
    2.remove 移除元素
    3.pop 随机取出一个元素，取出后元素将被移出集合
    4.clear 清空集合
    5.difference 取差集
    6.difference_update 集合1.difference_update(集合2)集合1修改 集合2不变
    7.union 合并集合
    8.len 统计集合数量(去重后的数量)
    9.copy 复制集合得到一个新的副本集合
    10.集合的遍历 仅支持for循环遍历
"""

# 定义集合
my_set = {"曹操", "刘备", "关羽", "曹操", "刘备", "关羽", "曹操", "刘备", "关羽"}
empty_set = set()
print(f"my_set集合内容为：{my_set},类型为：{type(my_set)}")
print(f"empty_set集合内容为：{empty_set},类型为：{type(empty_set)}")

# 添加元素 add
my_set.add("张飞")
my_set.add("曹操")  # 会被去重
print(f"添加元素后的结果为：{my_set}")

# 移除元素 remove
my_set.remove("曹操")
print(f"移除曹操后的结果为：{my_set}")

# 随机取出元素 pop
my_set = {"曹操", "刘备", "关羽"}
element = my_set.pop()
print(f"取出元素为：{element},取出元素后集合为：{my_set}")

# 清空集合
my_set.clear()
print(f"清空集合后结果为：{my_set},类型为：{type(my_set)}")

# 取两个集合的差集(集合1有集合2没有的元素集合)，得到一个新的集合，原集合不变 集合1.difference(集合2)
set1 = {1, 2, 3}
set2 = {2, 3, 4}
cha_set = set1.difference(set2)
print(f"集合1{set1}和集合2{set2}的差集为：{cha_set}")

# 消除两个集合的差：对比两个集合，在集合1内删除与集合2相同的元素，集合1被修改，集合2不变
# 格式：集合1.difference_update(集合2)
set1.difference_update(set2)  # set1 = {1} set2不变
print(f"消除两个几个的差集后，集合set1为：{set1}")
print(f"消除两个几个的差集后，集合set2为：{set2}")

# 合并集合：集合合并得到一个新的集合，原集合不变 集合1.union(集合2)
set1 = {1, 2, 3}
set2 = {2, 3, 4}
union_set = set1.union(set2)
print(f"set1{set1}和set2{set2}合并后的得到一个新的集合为：{union_set}")

# 统计集合的元素数量 len() 注意：统计的是去重后的数量
my_set = {1, 2, 3, 2, 3}
num = len(my_set)
print(f"集合my_set的元素数量为：{num}")

# 复制集合 得到一个集合的浅拷贝副本 原集合.copy()
copy_set = my_set.copy()
print(f"拷贝集合my_set{my_set}得到一个新的集合为:{copy_set}")

# 集合的遍历 注意：几个不支持下标索引所以不能使用while循环遍历，只能使用for循环遍历
my_set = {1, 2, 3, 2, 3}
for element in my_set:
    print(f"集合{my_set}的元素有:{element}")
